﻿Public Class RendezVous_Screen

    Private _ctrl As RendezVous_CTRL

    Public Sub New(ByVal ctrl As RendezVous_CTRL)

        ' Cet appel est requis par le Concepteur Windows Form.
        InitializeComponent()

        ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
        'Initialisation du controleur
        _ctrl = ctrl
        'initialisation de l'afficahge de la boite de saisie d'un nouveau rdv
        GrpNouveauRDV.Visible = False

        'Initialisation des boutons de la BarBouton
        BarBouton1.BtnClients.Visible = True
        BarBouton1.BtnClients.Enabled = False
        BarBouton1.BtnAnimaux.Visible = True
        BarBouton1.BtnAnimaux.Enabled = False

        BarBouton1.PnlGestionDonnées.Visible = True

        'Initialisation de la combobox ChoixVeto

        ChoixVetoDate1.setListeVeto = _ctrl.getListeVeto

        'Initialisation des combobox heure du rendez-vous
        For h = 7 To 21
            CmbChoixHeureHeure.Items.Add(h.ToString & "h")
        Next

        For m = 0 To 3
            CmbChoixHeureMinute.Items.Add(Format(m * 15, "00"))
        Next

        'Initialisation de la liste des clients
        RafraichirListeClient()

        

    End Sub

    Private Sub RafraichirListeClient()
        CmbChoixClientNouveauRDV.Items.Clear()
        CmbChoixClientNouveauRDV.Items.AddRange(_ctrl.getListeClient.ToArray)
    End Sub

    Private Sub BarBouton1_Action(ByVal sender As Object, ByVal e As ActionEventArgs) Handles BarBouton1.Action
        Select Case e.Action
            Case actionEnum.Ajouter
                GrpNouveauRDV.Visible = True
                BarBouton1.BtnClients.Enabled = True
                BarBouton1.BtnEnregistrer.Enabled = True
            Case actionEnum.Enregistrer
                If isSaisieRDVOK() Then
                    BarBouton1.BtnEnregistrer.Enabled = False
                    'todo tout refaire avec des objet et des Tostring dans les combobox
                    Dim creneaurdv As New Date(ChoixVetoDate1.DtpChoixDate.Value.Year, _
                                               ChoixVetoDate1.DtpChoixDate.Value.Month, _
                                               ChoixVetoDate1.DtpChoixDate.Value.Day, _
                                               CType(CmbChoixHeureHeure.SelectedItem, String).Remove(CType(CmbChoixHeureHeure.SelectedItem, String).Length - 1), _
                                               CmbChoixHeureMinute.SelectedItem, 0)
                    _ctrl.enregistrerRDV(ChoixVetoDate1.CmbChoixVeto.SelectedItem, _
                                         creneaurdv, _
                                         CmbChoixClientNouveauRDV.SelectedItem, _
                                         CmbChoixAnimalNouveauRDV.SelectedItem)
                    RafraichirLagenda()
                    BarBouton1.BtnClients.Enabled = False
                    BarBouton1.BtnEnregistrer.Enabled = False
                    'Else
                    '    'todo : gerer avec du errorprovider
                    '    MsgBox("Saisie du Rendez-vous non-valide", MsgBoxStyle.Exclamation, "Erreur")
                End If
            Case actionEnum.Annuler
                'ChoixVetoDate1.CmbChoixVeto.SelectedIndex = -1
                'ChoixVetoDate1.DtpChoixDate.Value = Now
                CmbChoixHeureHeure.SelectedIndex = -1
                CmbChoixHeureMinute.SelectedIndex = -1
                GrpNouveauRDV.Visible = False
            Case actionEnum.Supprimer
                Dim rdv As New Agendas
                rdv = CType(Agenda1.DgAgenda.SelectedRows(0).DataBoundItem, Agendas)
                Dim reponse As DialogResult = MessageBox.Show("Supprimer ce Rendez-vous ?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)
                If reponse = Windows.Forms.DialogResult.Yes Then
                    _ctrl.SupprimerRDV(rdv)
                    RafraichirLagenda()
                End If
            Case actionEnum.LienClient
                Dim frm As New Client_Screen(Main_CTRL.getInstance.getClient_CTRL, True)
                frm.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
                frm.ShowDialog()
                RafraichirListeClient()
                frm.Dispose()
            Case actionEnum.LienAnimaux
                Dim frm As New Animaux_Screen(Main_CTRL.getInstance.getAnimaux_CTRL(_ctrl.getListeClient(CmbChoixClientNouveauRDV.SelectedIndex)))
                frm.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
                frm.ShowDialog()
                'todo : rafraichir là
                RafraichirListeAnimaux()
                frm.Dispose()
        End Select
    End Sub

    Private Function isSaisieRDVOK(Optional ByVal Urgence As Boolean = False) As Boolean
        ChoixVetoDate1.ErrorProviderChoixVetoDate.SetError(ChoixVetoDate1.CmbChoixVeto, "")
        ChoixVetoDate1.ErrorProviderChoixVetoDate.SetError(ChoixVetoDate1.DtpChoixDate, "")
        ErrorProviderRDV.SetError(CmbChoixHeureHeure, "")
        ErrorProviderRDV.SetError(CmbChoixHeureMinute, "")
        ErrorProviderRDV.SetError(CmbChoixClientNouveauRDV, "")
        ErrorProviderRDV.SetError(CmbChoixAnimalNouveauRDV, "")

        Dim reponse As Boolean = True
        Dim creneaurdv As Date

        If ChoixVetoDate1.CmbChoixVeto.SelectedIndex < 0 Then
            ChoixVetoDate1.ErrorProviderChoixVetoDate.SetError(ChoixVetoDate1.CmbChoixVeto, "Veuillez choisir un vétérinaire")
            reponse = False
        End If


        If CmbChoixClientNouveauRDV.SelectedIndex < 0 Then
            ErrorProviderRDV.SetError(CmbChoixClientNouveauRDV, "Veuillez choisir un client")
            reponse = False
        ElseIf CmbChoixAnimalNouveauRDV.SelectedIndex < 0 Then
            ErrorProviderRDV.SetError(CmbChoixAnimalNouveauRDV, "Veuillez choisir un animal")
            reponse = False
        End If



        If Not Urgence Then
            Dim daterdv As Date
            With ChoixVetoDate1.DtpChoixDate.Value
                daterdv = New Date(.Year, _
                                   .Month, _
                                   .Day, _
                                   CmbChoixHeureHeure.SelectedItem.ToString.Split("h")(0), _
                                   CmbChoixHeureMinute.SelectedItem.ToString, _
                                   0)
            End With
            If daterdv < Now Then
                ChoixVetoDate1.ErrorProviderChoixVetoDate.SetError(ChoixVetoDate1.DtpChoixDate, "Veuillez choisir une date future")
                reponse = False
            End If
            If CmbChoixHeureHeure.SelectedIndex < 0 Then
                ErrorProviderRDV.SetError(CmbChoixHeureHeure, "Veuillez choisir une heure")
                reponse = False
            End If
            If CmbChoixHeureHeure.SelectedIndex < 0 Then
                ErrorProviderRDV.SetError(CmbChoixHeureMinute, "Veuillez choisir le créneau horaire")
                reponse = False
            End If
            If reponse = True Then

                With ChoixVetoDate1.DtpChoixDate.Value
                    creneaurdv = New Date(.Year, .Month, .Day, _
                                        CType(CmbChoixHeureHeure.SelectedItem, String).Remove(CType(CmbChoixHeureHeure.SelectedItem, String).Length - 1), _
                                        CmbChoixHeureMinute.SelectedItem, _
                                        0)
                End With
            End If
        Else
            creneaurdv = Now
        End If

        reponse = reponse And _ctrl.VerifRdv(ChoixVetoDate1.CmbChoixVeto.SelectedItem, creneaurdv)

        Return reponse
    End Function

    Private Sub RafraichirLagenda()
        Agenda1.DgAgenda.DataSource = _ctrl.getAgendaJour(ChoixVetoDate1.CmbChoixVeto.SelectedItem, ChoixVetoDate1.DtpChoixDate.Value)
    End Sub

    Private Sub CmbChoixClientNouveauRDV_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmbChoixClientNouveauRDV.SelectedIndexChanged
        BarBouton1.BtnAnimaux.Enabled = True
        RafraichirListeAnimaux()
    End Sub

    Private Sub RafraichirListeAnimaux()
        CmbChoixAnimalNouveauRDV.Items.Clear()
        CmbChoixAnimalNouveauRDV.Text = ""
        CmbChoixAnimalNouveauRDV.Items.AddRange(_ctrl.getListeAnimal(CmbChoixClientNouveauRDV.SelectedItem).ToArray)

    End Sub

    'todo pb qqd le veto est pas selectionné
    Private Sub ChoixVetoDate1_ModifSelection(ByVal sender As Object, ByVal e As ModifSelectionEventArgs) Handles ChoixVetoDate1.ModifSelection
        If e.Veto IsNot Nothing Then
            Agenda1.DgAgenda.DataSource = _ctrl.getAgendaJour(e.Veto, e.Jour)
        End If
    End Sub


    Private Sub BtnUrgence_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnUrgence.Click
        If isSaisieRDVOK(True) Then
            BarBouton1.BtnEnregistrer.Enabled = False
            _ctrl.enregistrerRDV(ChoixVetoDate1.CmbChoixVeto.SelectedItem, _
                                    Now, _
                                    CmbChoixClientNouveauRDV.SelectedItem, _
                                    CmbChoixAnimalNouveauRDV.SelectedItem)
            RafraichirLagenda()
            BarBouton1.BtnClients.Enabled = False
            BarBouton1.BtnEnregistrer.Enabled = False
        End If
    End Sub
End Class